/***
 * @Description: 本文件主要是对定时器相关的内容进行构建，包括数据结构的定义和函数调用接口的头文件
 * @Author: Liverpool
 * @Date: 2024-05-27 23:15:41
 * @LastEditTime: 2024-05-27 23:16:48
 * @LastEditors: Liverpool
 */

#ifndef TIMRER_H
#define TIMRER_H

#include "config.h"
#include "netComman.h"
#include "list.h"

#define NET_TIMER_RELOAD (1 << 0) // 定义定时器是否需要重装载

typedef void (*time_proc_func)(struct _net_timer_t *timer, void *arg); // 定时器的回调函数

// 定时器的数据结构
typedef struct _net_timer_t
{
    char name[TIMER_NAME_SIZE]; // 定时器名称
    int flags;                  // 定时器相关标志位
    int curr;                   // 定时器的计数值，到0的时候触发回调函数
    int reload;                 // 周期性定时器的重装载值
    time_proc_func proc;        // 定时器的回调函数
    void *arg;                  // 回调函数使用的参数
    D_ListNode node;            // 构建的定时器链表的节点
} D_Net_timer;

net_err_t net_timer_init(void);                                                                                   // 定时器模块的初始化
net_err_t net_timer_add(D_Net_timer *timer, const char *name, time_proc_func func, void *arg, int ms, int flags); // 在定时器链表中添加定时器
void net_timer_remove(D_Net_timer *timer);                                                                        // 在定时器链表中移除对应的定时器
net_err_t net_timer_check_tmo(int time_diff);                                                                     // 对定时器链表进行扫描
int net_timer_first_tmo(void);                                                                                    // 获取第一个定时器节点的计数值
#endif                                                                                                            // !TIMRER_H